#!/usr/bin/env python
# -+- coding: utf-8 -*-

'''
@author: 5605 - António Delgado
@date: 19 de Outubro de 2013
@obs: Trabalho de Linguagens de Programação em Python
        Docente: Prof.Jasnau Caeiro
'''


import wx
import base_dados
import estatisticas
import graficos
import csv
# begin wxGlade: extracode
# end wxGlade


class MyFrame(wx.Frame):
    
    # Inicialização das classes para serem utilizadas nos eventos
    database = base_dados.Basedados()
    stats = estatisticas.Estatisiticas()
    grafico = graficos.Graficos()
        
    
    def __init__(self, *args, **kwds):
        
        
        self.db = self.database.criarbd()
        self.view = self.database.abrirexcel()
        
        
        # begin wxGlade: MyFrame.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.notebook_1 = wx.Notebook(self, -1, style=0)
        self.notebook_1_pane_1 = wx.Panel(self.notebook_1, -1)
        self.label_14 = wx.StaticText(self.notebook_1_pane_1, -1, u"\n   Ínicio\n")
        self.label_15 = wx.StaticText(self.notebook_1_pane_1, -1, u"            Bem vindo à aplicação que nos mostra as inscrições efectuadas no ensino superior:\n\n\n               1º tem que criar a base de dados;\n            \n               2º tem que criar as estatísticas;\n            \n               3º tem que adicionar os nomes dos gráficos à listbox;\n \n               4º  tem que carregar os gráficos pretendidos.\n\n\n\n")
        self.bitmap_1 = wx.StaticBitmap(self.notebook_1_pane_1, -1, wx.Bitmap("/home/user/Documentos/wxGlade/python-logo.png", wx.BITMAP_TYPE_ANY))
        self.notebook_1_pane_2 = wx.Panel(self.notebook_1, -1)
        self.label_12_copy = wx.StaticText(self.notebook_1_pane_2, -1, "\n   Base de Dados\n")
        self.label_13_copy = wx.StaticText(self.notebook_1_pane_2, -1, u"            Clique no botão para criar a base de dados:\n\n")
        self.button_7_copy = wx.Button(self.notebook_1_pane_2, -1, "Criar Base de Dados")
        self.bitmap_2_copy = wx.StaticBitmap(self.notebook_1_pane_2, -1, wx.Bitmap("/home/user/Documentos/wxGlade/base de dados.jpg", wx.BITMAP_TYPE_ANY))
        self.panel_9 = wx.Panel(self.notebook_1_pane_2, -1)
        self.panel_7_copy = wx.Panel(self.notebook_1_pane_2, -1)
        self.notebook_1_pane_3 = wx.Panel(self.notebook_1, -1)
        self.label_1_copy = wx.StaticText(self.notebook_1_pane_3, -1, u"\n   Estatísticas\n")
        self.label_2_copy = wx.StaticText(self.notebook_1_pane_3, -1, u"            Clique nos botões para criar as respectivas estatíscas e seus .CSV:")
        self.label_3_copy = wx.StaticText(self.notebook_1_pane_3, -1, "\n")
        self.button_1_copy = wx.Button(self.notebook_1_pane_3, -1, u"Criar Estatística 1")
        self.button_2_copy = wx.Button(self.notebook_1_pane_3, -1, u"Criar Estatística 2")
        self.panel_1_copy = wx.Panel(self.notebook_1_pane_3, -1)
        self.panel_11 = wx.Panel(self.notebook_1_pane_3, -1)
        self.panel_12 = wx.Panel(self.notebook_1_pane_3, -1)
        self.panel_7 = wx.Panel(self.notebook_1_pane_3, -1)
        self.button_3_copy = wx.Button(self.notebook_1_pane_3, -1, u"Criar Estatística 3")
        self.button_4_copy = wx.Button(self.notebook_1_pane_3, -1, u"Criar Estatística 4")
        self.panel_8 = wx.Panel(self.notebook_1_pane_3, -1)
        self.panel_10 = wx.Panel(self.notebook_1_pane_3, -1)
        self.panel_13 = wx.Panel(self.notebook_1_pane_3, -1)
        self.panel_3_copy = wx.Panel(self.notebook_1_pane_3, -1)
        self.notebook_1_pane_4 = wx.Panel(self.notebook_1, -1)
        self.label_5_copy = wx.StaticText(self.notebook_1_pane_4, -1, u"\n   Gráficos\n")
        self.label_6_copy = wx.StaticText(self.notebook_1_pane_4, -1, u"            Gráfico que representa a evolução do número de alunos inscritos ao")
        self.label_7_copy = wx.StaticText(self.notebook_1_pane_4, -1, "            longo dos anos, por cada curso:\n\n")
        self.list_box_1_copy = wx.ListBox(self.notebook_1_pane_4, -1, choices=["", "", "", ""])
        self.label_1 = wx.StaticText(self.notebook_1_pane_4, -1, "")
        self.checkbox_1 = wx.CheckBox(self.notebook_1_pane_4, -1, "Adicionar Cursos")
        self.button_5_copy = wx.Button(self.notebook_1_pane_4, -1, u"Carregar Gráfico")
        self.label_9_copy = wx.StaticText(self.notebook_1_pane_4, -1, u"            \n            Gráfico que representa a evolução do número total de alunos inscritos ao\n            longo dos anos por nível de formação:\n")
        self.list_box_2_copy = wx.ListBox(self.notebook_1_pane_4, -1, choices=["", "", "", ""])
        self.label_2 = wx.StaticText(self.notebook_1_pane_4, -1, "")
        self.checkbox_2 = wx.CheckBox(self.notebook_1_pane_4, -1, u"Adicionar N. Formação")
        self.button_6_copy = wx.Button(self.notebook_1_pane_4, -1, u"Carregar Gráfico")
        self.label_11_copy = wx.StaticText(self.notebook_1_pane_4, -1, "")
        self.notebook_1_pane_5 = wx.Panel(self.notebook_1, -1)
        self.label_21 = wx.StaticText(self.notebook_1_pane_5, -1, u"\n   Créditos\n")
        self.label_22 = wx.StaticText(self.notebook_1_pane_5, -1, u"            Esta aplicação é de um trabalho da Unidade Curricular de Linguagens \n            de Programação, que consiste em passar os dados de uma ficheiro excel \n            para uma base de dados em SQLAlchemy.\n\n            Em seguida usam-se esses dados para fazer estatísticas e guarda-las\n            em .CSV para posteriormente criar-mos os gráficos que \n            representam as estatísticas.\n\n\n            Docente :   Jasnau Caeiro\n\n            Alunos:  António Delgado nº5605\n")
        self.panel_14 = wx.Panel(self.notebook_1_pane_5, -1)

        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_BUTTON, self.evt_btnBD, self.button_7_copy)
        self.Bind(wx.EVT_BUTTON, self.evt_btnETT1, self.button_1_copy)
        self.Bind(wx.EVT_BUTTON, self.evt_btnETT2, self.button_2_copy)
        self.Bind(wx.EVT_BUTTON, self.evt_btnETT3, self.button_3_copy)
        self.Bind(wx.EVT_BUTTON, self.evt_btnETT4, self.button_4_copy)
        self.Bind(wx.EVT_CHECKBOX, self.evt_carregarlista1, self.checkbox_1)
        self.Bind(wx.EVT_BUTTON, self.evt_btnEG1, self.button_5_copy)
        self.Bind(wx.EVT_CHECKBOX, self.evt_carregarlista2, self.checkbox_2)
        self.Bind(wx.EVT_BUTTON, self.evt_btnG2, self.button_6_copy)
        # end wxGlade

    def __set_properties(self):
        # begin wxGlade: MyFrame.__set_properties
        self.SetTitle(u"Colocados no Ensino Superior")
        self.SetSize((700, 600))
        self.label_14.SetForegroundColour(wx.Colour(51, 51, 51))
        self.label_14.SetFont(wx.Font(14, wx.MODERN, wx.NORMAL, wx.BOLD, 0, "Sans"))
        self.label_12_copy.SetForegroundColour(wx.Colour(51, 51, 51))
        self.label_12_copy.SetFont(wx.Font(14, wx.MODERN, wx.NORMAL, wx.BOLD, 0, "Sans"))
        self.label_1_copy.SetForegroundColour(wx.Colour(0, 0, 0))
        self.label_1_copy.SetFont(wx.Font(14, wx.MODERN, wx.NORMAL, wx.BOLD, 0, "Sans"))
        self.label_5_copy.SetForegroundColour(wx.Colour(51, 51, 51))
        self.label_5_copy.SetFont(wx.Font(14, wx.MODERN, wx.NORMAL, wx.BOLD, 0, "Sans"))
        self.list_box_1_copy.SetSelection(0)
        self.list_box_2_copy.SetSelection(0)
        self.label_21.SetForegroundColour(wx.Colour(51, 51, 51))
        self.label_21.SetFont(wx.Font(14, wx.MODERN, wx.NORMAL, wx.BOLD, 0, "Sans"))
        # end wxGlade

    def __do_layout(self):
        # begin wxGlade: MyFrame.__do_layout
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        sizer_5 = wx.BoxSizer(wx.VERTICAL)
        sizer_3_copy = wx.BoxSizer(wx.VERTICAL)
        grid_sizer_3_copy = wx.GridSizer(1, 4, 0, 0)
        grid_sizer_2_copy = wx.GridSizer(1, 4, 0, 0)
        sizer_2_copy = wx.BoxSizer(wx.VERTICAL)
        grid_sizer_1_copy = wx.GridSizer(3, 3, 0, 0)
        sizer_4_copy = wx.BoxSizer(wx.VERTICAL)
        grid_sizer_4_copy = wx.GridSizer(1, 2, 0, 0)
        sizer_4 = wx.BoxSizer(wx.VERTICAL)
        sizer_4.Add(self.label_14, 0, 0, 0)
        sizer_4.Add(self.label_15, 0, 0, 0)
        sizer_4.Add(self.bitmap_1, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
        self.notebook_1_pane_1.SetSizer(sizer_4)
        sizer_4_copy.Add(self.label_12_copy, 0, 0, 0)
        sizer_4_copy.Add(self.label_13_copy, 0, 0, 0)
        grid_sizer_4_copy.Add(self.button_7_copy, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL, 0)
        grid_sizer_4_copy.Add(self.bitmap_2_copy, 0, 0, 0)
        grid_sizer_4_copy.Add(self.panel_9, 1, wx.EXPAND, 0)
        sizer_4_copy.Add(grid_sizer_4_copy, 1, wx.EXPAND, 0)
        sizer_4_copy.Add(self.panel_7_copy, 1, wx.EXPAND, 0)
        self.notebook_1_pane_2.SetSizer(sizer_4_copy)
        sizer_2_copy.Add(self.label_1_copy, 0, 0, 0)
        sizer_2_copy.Add(self.label_2_copy, 0, 0, 0)
        sizer_2_copy.Add(self.label_3_copy, 0, 0, 0)
        grid_sizer_1_copy.Add(self.button_1_copy, 0, wx.ALIGN_RIGHT, 0)
        grid_sizer_1_copy.Add(self.button_2_copy, 0, wx.ALIGN_RIGHT, 0)
        grid_sizer_1_copy.Add(self.panel_1_copy, 1, wx.EXPAND, 0)
        grid_sizer_1_copy.Add(self.panel_11, 1, wx.EXPAND, 0)
        grid_sizer_1_copy.Add(self.panel_12, 1, wx.EXPAND, 0)
        grid_sizer_1_copy.Add(self.panel_7, 1, wx.EXPAND, 0)
        grid_sizer_1_copy.Add(self.button_3_copy, 0, wx.ALIGN_RIGHT, 0)
        grid_sizer_1_copy.Add(self.button_4_copy, 0, wx.ALIGN_RIGHT, 0)
        grid_sizer_1_copy.Add(self.panel_8, 1, wx.EXPAND, 0)
        grid_sizer_1_copy.Add(self.panel_10, 1, wx.EXPAND, 0)
        grid_sizer_1_copy.Add(self.panel_13, 1, wx.EXPAND, 0)
        sizer_2_copy.Add(grid_sizer_1_copy, 1, wx.EXPAND, 0)
        sizer_2_copy.Add(self.panel_3_copy, 1, wx.EXPAND, 0)
        self.notebook_1_pane_3.SetSizer(sizer_2_copy)
        sizer_3_copy.Add(self.label_5_copy, 0, 0, 0)
        sizer_3_copy.Add(self.label_6_copy, 0, 0, 0)
        sizer_3_copy.Add(self.label_7_copy, 0, 0, 0)
        grid_sizer_2_copy.Add(self.list_box_1_copy, 0, 0, 0)
        grid_sizer_2_copy.Add(self.label_1, 0, 0, 0)
        grid_sizer_2_copy.Add(self.checkbox_1, 0, 0, 0)
        grid_sizer_2_copy.Add(self.button_5_copy, 0, 0, 0)
        sizer_3_copy.Add(grid_sizer_2_copy, 1, wx.EXPAND, 0)
        sizer_3_copy.Add(self.label_9_copy, 0, 0, 0)
        grid_sizer_3_copy.Add(self.list_box_2_copy, 0, 0, 0)
        grid_sizer_3_copy.Add(self.label_2, 0, 0, 0)
        grid_sizer_3_copy.Add(self.checkbox_2, 0, 0, 0)
        grid_sizer_3_copy.Add(self.button_6_copy, 0, 0, 0)
        sizer_3_copy.Add(grid_sizer_3_copy, 1, wx.EXPAND, 0)
        sizer_3_copy.Add(self.label_11_copy, 0, 0, 0)
        self.notebook_1_pane_4.SetSizer(sizer_3_copy)
        sizer_5.Add(self.label_21, 0, 0, 0)
        sizer_5.Add(self.label_22, 0, 0, 0)
        sizer_5.Add(self.panel_14, 1, wx.EXPAND, 0)
        self.notebook_1_pane_5.SetSizer(sizer_5)
        self.notebook_1.AddPage(self.notebook_1_pane_1, u"Ínicio")
        self.notebook_1.AddPage(self.notebook_1_pane_2, "Base de Dados")
        self.notebook_1.AddPage(self.notebook_1_pane_3, u"Estatísticas")
        self.notebook_1.AddPage(self.notebook_1_pane_4, u"Gráficos")
        self.notebook_1.AddPage(self.notebook_1_pane_5, u"Créditos")
        sizer_1.Add(self.notebook_1, 1, 0, 0)
        self.SetSizer(sizer_1)
        self.Layout()
        # end wxGlade


    def evt_btnBD(self, event):  # wxGlade: MyFrame.<event_handler>
        '''
        Evente que nos permite criar a base de dados e 
        introduzir os dados na base de dados.
        '''
        self.database.inserirdados(self.db, self.view)
        event.Skip()

    def evt_btnETT1(self, event):  # wxGlade: MyFrame.<event_handler>
        '''
        Evento que vai criar a estatística 1
        '''
        dados = self.database.querydados(self.db)
        estt1 = self.stats.estatistica1(dados)
        self.stats.csv(estt1, 'Estatistica1')
        event.Skip()

    def evt_btnETT2(self, event):  # wxGlade: MyFrame.<event_handler>
        '''
        Evento que vai criar a estatística 2
        '''
        dados = self.database.querydados(self.db)
        estt2 = self.stats.estatistica2(dados)
        self.stats.csv(estt2, 'Estatistica2')
        event.Skip()

    def evt_btnETT3(self, event):  # wxGlade: MyFrame.<event_handler>
        '''
        Evento que vai criar a estatística 3
        '''
        dados = self.database.querydados(self.db)
        estt3 = self.stats.estatistica3(dados)
        self.stats.csv(estt3, 'Estatistica3')
        event.Skip()

    def evt_btnETT4(self, event):  # wxGlade: MyFrame.<event_handler>
        '''
        Evento que vai criar a estatística 4
        '''
        dados = self.database.querydados(self.db)
        estt4 = self.stats.estatistica4(dados)
        self.stats.csv(estt4, 'Estatistica4')
        event.Skip()

    def evt_btnEG1(self, event):  # wxGlade: MyFrame.<event_handler>
        '''
        Evento que vai criar o gráfico da estatística
        consoante o nome selectionado na listbox
        '''
        self.grafico.grafico('Estatistica2' ,self.list_box_1_copy.GetString(self.list_box_1_copy.GetSelection()))
        event.Skip()

    def evt_btnG2(self, event):  # wxGlade: MyFrame.<event_handler>
        '''
        Evento que vai criar o gráfico da estatística
        consoante o nome selectionado na listbox
        '''
        self.grafico.grafico('Estatistica4' ,self.list_box_2_copy.GetString(self.list_box_2_copy.GetSelection()))
        event.Skip()

    def evt_carregarlista1(self, event):  # wxGlade: MyFrame.<event_handler>
        '''
        Evento que vai introduzir todos os nomes na listbox
        para que seleccione-mos o gráfico que pretendemos visualizar
        '''
        x = 350
        y = 150
        estat2 = []  
        self.list_box_1_copy.SetSize((x, y)) 
        estt2 = []
        reader = csv.reader(open("Estatistica2.csv", "rb"))
        for row in reader:
            estt2.append(row)   
        for i in range(0, len(estt2)):
            estat2.append((estt2[i][0]).decode('utf-8'))
        self.list_box_1_copy.InsertItems(estat2,0)
        self.list_box_1_copy.SetSelection(0)     
        event.Skip()

    def evt_carregarlista2(self, event):  # wxGlade: MyFrame.<event_handler>
        '''
        Evento que vai introduzir todos os nomes na listbox
        para que seleccione-mos o gráfico que pretendemos visualizar
        '''
        x = 350
        y = 150
        estat4 = []  
        self.list_box_2_copy.SetSize((x, y)) 
        estt4 = []
        reader = csv.reader(open("Estatistica4.csv", "rb"))
        for row in reader:
            estt4.append(row)   
        for i in range(0, len(estt4)):
            estat4.append((estt4[i][0]).decode('utf-8'))
        self.list_box_2_copy.InsertItems(estat4,0)
        self.list_box_2_copy.SetSelection(0) 
        event.Skip()

# end of class MyFrame
if __name__ == "__main__":
    app = wx.PySimpleApp(0)
    wx.InitAllImageHandlers()
    frame_1 = MyFrame(None, -1, "")
    app.SetTopWindow(frame_1)
    frame_1.Show()
    app.MainLoop()



